import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import store from '@/store/index';


const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'login',
    component: () => import('@/components/login/admin-login.vue')
  },
  // 以下通过动态路由配置
  // {
  //   path: '/adm-index',
  //   name: 'adm-index',
  //   component: () => import('@/components/login/admin-index.vue'),
  //   children: [
  //     {
  //       path: "",
  //       name: "adm-welcome",
  //       component: () => import('@/components/login/admin-welcome.vue'),
  //     },
  //     {
  //       path: "nav",
  //       name: "nav",
  //       component: () => import('@/components/nav/nav-list.vue'),
  //     },
  //     {
  //       path: "article",
  //       name: "article",
  //       component: () => import('@/components/article/article-list.vue'),
  //     }
  //   ]
  // },
  {
    path: "/:pathMatch(.*)*",
    redirect: "/"
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

/**
 * 清除管理端的路由，并添加首页路由
 */
const clearAdminRoute = function () {
  // 删除：可以不要
  // router.removeRoute("adm-index");

  // 配置动态路由的时候，一定加上name，但是可以让我们有效地管理路由
  // 如果添加了同名的路由，那么会覆盖掉以前的路由规则
  router.addRoute({
    path: '/adm-index',
    name: 'adm-index',
    component: () => import("@/components/login/admin-index.vue")
  });

  // 添加子路由
  // 格式：第一个参数传父路由的name
  router.addRoute("adm-index", { path: "", name: "adm-welcome", component: () => import("@/components/login/admin-welcome.vue") })
}

// 添加一条路由规则
const addAdminRoute = function (obj: IStringKey<string>) {
  // 动态路由import的参数必须拼接，直接用变量会找不到模块
  const component = () => import(`@/components${obj.import_path}`);
  const routeObj = { path: obj.page_url, name: obj.page_url, component }
  // console.log("routeObj = ",routeObj);
  router.addRoute("adm-index", routeObj)
}

/**
 * 重新设置路由，并根据store中的数据，加载动态路由
 */
const setAdminRoute = function () {
  const admin = store.state.admin;
  console.log("重新设置动态路由");
  clearAdminRoute();
  admin.funList?.forEach(v => {
    v.funs.forEach(v2 => {
      // 列表
      if (v2.type == 2) {
        addAdminRoute(<any>v2);
      }
    })
  })
}


export {setAdminRoute }
export default router
